package com.tmsps.common.util.result;


import com.tmsps.common.config.prop.ExceptionCode;
import com.tmsps.common.util.ApplicationContextUtil;
import com.tmsps.ne4spring.utils.ChkUtil;

/**
 * 返回结果工具类
 * @author jiangtao
 */
public class WebResult {

    private static ExceptionCode exceptionCode = ApplicationContextUtil.getBean(ExceptionCode.class);

    /**
     * 全局参数错误信息
     */
    public static ResponseBean getResultExParam(String message) {
        if(ChkUtil.isNull(message)){
            message = "参数异常";
        }
        return getResult(ResponseCodeEnum.EX_USER_REG_PARAMS, message);
    }
    
	/**
	 * 参数错误信息
	 */
	public static ResponseBean getResultExParam() {
	    return getResultExParam(null);
	}

	/**
     * 未登录错误信息
     */
    public static ResponseBean getResultExLogin(String message) {
        return getResult(ResponseCodeEnum.EX_USER_REG_LOGIN_EXPIRED, message);
    }
    
    /**
     * 参数错误信息
     */
    public static ResponseBean getResultExLogin() {
        return getResultExLogin(null);
    }
	
    /**
     * 没有权限错误信息
     */
    public static ResponseBean getResultExAuth(String message) {
        return getResult(ResponseCodeEnum.EX_USER_REG_AUTHORITY_UNAUTHORIZED, message);
    }
    
    /**
     * 没有权限错误信息
     *     defaultMsg: 没有权限操作
     * @since 1.0.0
     */
    public static ResponseBean getResultExAuth() {
        return getResultExAuth(null);
    }

    /**
     * 操作成功
     *
     * @param message   成功提示信息
     * @param data      数据对象
     * @return ResponseBean
     */
    public static ResponseBean getResultPassOk(String message, Object data) {
        if(ChkUtil.isNull(message)){
            message = "操作成功";
        }
        return new ResponseBean(ResponseCodeEnum.PASS_OK, message, data);
    }
    
    /**
     * 成功信息，自定义返回描述
     */
    public static ResponseBean getResultPassOk(String message) {
        return getResultPassOk(message, null);
    }
    
    /**
     * 成功信息，自定义返回数据
     * @since 1.0.0
     */
    public static ResponseBean getResultPassOk(Object data) {
        return getResultPassOk(null, data);
    }
    
	/**
	 * 成功信息
	 */
	public static ResponseBean getResultPassOk() {
		return getResultPassOk(null, null);
	}

	/**
     * 操作失败错误信息
     * @since 1.0.0
     */
    public static ResponseBean getResultPassError(ResponseCodeEnum repCode, String message) {
        if(ChkUtil.isNull(message)){
            message = "操作失败";
        }
        return getResult(repCode, message);
    }

    /**
     * 操作失败错误信息
     * @since 1.0.0
     */
    public static ResponseBean getResultPassError(ResponseCodeEnum repCode) {
        return getResult(repCode, repCode.getMsg());
    }

    /**
     * 操作失败错误信息
     * @since 1.0.0
     */
    public static ResponseBean getResultPassError() {
        return getResultPassError(ResponseCodeEnum.EX_USER_REG_PARAMS_INVALID, null);
    }

	/**
	 * 自定义返回全局信息
     */
    public static ResponseBean getResult(ResponseCodeEnum repCode, String message) {
        if(ChkUtil.isNull(message)){
            message = repCode.getMsg();
        }
        return new ResponseBean(repCode, message, null);
    }

    /**
     * 自定义返回本项目错误码信息
     */
    public static ResponseBean getResult(ResponseCodeEnum repCode) {
        return new ResponseBean(repCode);
    }

    public static ResponseBean getResultByCode(String repCode, String message) {
        if(ChkUtil.isNull(message)){
            message = exceptionCode.getMessage(repCode);
        }
        return new ResponseBean(repCode, message);
    }

    public static ResponseBean getResultByCode(String repCode) {
        return getResultByCode(repCode, exceptionCode.getMessage(repCode));
    }

    /**
     * 条件不成立，则返回自定义错误信息
     *
     * @param condition 成立条件
     * @param repErrCode 自定义错误码(ExceptionCode)
     * @return ResponseBean
     */
    public static ResponseBean getResult(boolean condition, String repErrCode) {
        if(!condition){
            return WebResult.getResultByCode(repErrCode);
        }
        return WebResult.getResultPassOk();
    }

    /**
     * 条件不成立，则返回自定义错误信息,否则返回自定义成功信息
     *
     * @param condition 成立条件
     * @param repErrCode 自定义错误码(ExceptionCode)
     * @param successMessage 自定义成功信息
     * @return
     */
    public static ResponseBean getResult(boolean condition, String repErrCode, String successMessage) {
        if(!condition){
            return WebResult.getResultByCode(repErrCode);
        }
        return WebResult.getResultPassOk(successMessage);
    }

    /**
     * 条件不成立，则返回自定义错误信息,否则返回自定义数据对象
     *
     * @param condition 成立条件
     * @param repErrCode 自定义错误码(ExceptionCode)
     * @param data 数据对象
     * @return ResponseBean
     */
    public static ResponseBean getResult(boolean condition, String repErrCode, Object data) {
        if(!condition){
            return WebResult.getResultByCode(repErrCode);
        }
        return WebResult.getResultPassOk(data);
    }

    /**
     * 条件不成立，则返回自定义错误信息,否则返回自定义成功信息
     *
     * @param condition 成立条件
     * @param repErrCode 自定义错误码(ExceptionCode)
     * @param successMessage 自定义成功信息
     * @param data 数据对象
     * @return ResponseBean
     */
    public static ResponseBean getResult(boolean condition, String repErrCode, String successMessage, Object data) {
        if(!condition){
            return WebResult.getResultByCode(repErrCode);
        }
        return WebResult.getResultPassOk(successMessage, data);
    }

    /**
     * 条件不成立，则返回错误信息
     *
     * @param condition 成立条件
     * @param repCode 错误码(ResponseCodeEnum)
     * @return ResponseBean
     */
    public static ResponseBean getResult(boolean condition, ResponseCodeEnum repCode) {
        if(!condition){
            return WebResult.getResultPassError(repCode);
        }
        return WebResult.getResultPassOk();
    }

    /**
     * 条件不成立，则返回错误信息,否则返回自定义成功信息
     *
     * @param condition 成立条件
     * @param repCode 错误码(ResponseCodeEnum)
     * @param successMessage 自定义成功信息
     * @return ResponseBean
     */
    public static ResponseBean getResult(boolean condition, ResponseCodeEnum repCode, String successMessage) {
        if(!condition){
            return WebResult.getResultPassError(repCode);
        }
        return WebResult.getResultPassOk(successMessage);
    }

    /**
     * 条件不成立，则返回错误信息,否则返回自定义成功信息
     *
     * @param condition 成立条件
     * @param repCode 错误码(ResponseCodeEnum)
     * @param successMessage 自定义成功信息
     * @param data 数据对象
     * @return ResponseBean
     */
    public static ResponseBean getResult(boolean condition, ResponseCodeEnum repCode, String successMessage, Object data) {
        if(!condition){
            return WebResult.getResultPassError(repCode);
        }
        return WebResult.getResultPassOk(successMessage, data);
    }

}
